import com.classAnnotation.*;
import com.functionAnnotation.UserBean;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 23735
 * Date: 2023-02-07
 * Time: 21:33
 */
public class App {
    public static void main(String[] args) {
        ApplicationContext context=new ClassPathXmlApplicationContext("spring-config.xml");
        // spring 存储 Bean 时的命名规则是
        // 第一个字母大写, 第二个字母小写时, 将首字母变为 小写即可
        // 其他的情况全部都是 类名本身

        APIUser apiUser=context.getBean("APIUser", APIUser.class);
        apiUser.display();

        // 五大类注解
        UserComponent userComponent=context.getBean("userComponent",UserComponent.class);
        userComponent.display("张三");

        UserConfiguration userConfiguration=context.getBean("userConfiguration",UserConfiguration.class);
        userConfiguration.display();

        UserController userController=context.getBean("userController",UserController.class);
        userController.display();

        UserRepository userRepository=context.getBean("userRepository",UserRepository.class);
        userRepository.display();

        UserService userService=context.getBean("userService", UserService.class);
        userService.display();

        // 方法注解
        //　将方法返回的类添加到 spring 中
        // 所以再获取 这个类直接从 spring 中 getBean 即可
        // 同时注意 参数是 方法名(或者重新命的名) 且 BeanFactory 不支持这个利用方法名获取
        User user = context.getBean("u1",User.class);
        System.out.println(user);


        // bean 的注入
        // 属性注入
        user = userController.getUser1();
        System.out.println(user);
        // 构造方法注入
        user=userController.getUser2();
        System.out.println(user);
        // setter 注入
        user=userController.getUser3();
        System.out.println(user);

        // 修改为多例作用域之后 原本的 bean 没有被修改
        user =context.getBean("getUser2",User.class);
        System.out.println(user);
    }
}
